// 用户相关的状态管理

import { createSlice } from '@reduxjs/toolkit'
import { getToken, setToken as _setToken, removeToken } from '@/utils'
import { LoginService,getUserInfoService } from '@/apis/user'

const userStore = createSlice({
    name: 'user',
    initialState: {
        // 初始化state，先从localStorage中访问，如果不存在则为空字符
        token: getToken(),
        userinfo: {}
    },
    // 同步修改方法
    reducers: {
        setToken(state, action) {
            // 1.更新状态
            state.token = action.payload
            // 2.存储到本地存储中LocalStorage
            _setToken(action.payload)
        },
        setUserInfo(state, action) {
            state.userinfo = action.payload
        },
        clearUserInfo(state) {
            state.userinfo = {}
            state.token = ''
            removeToken()
        }
    }
})


// 导出状态管理
export default userStore.reducer
// 导出同步方法
export const { setToken, setUserInfo, clearUserInfo } = userStore.actions


// 异步操作方法

// 登录
export const fetchLogin = (data) => {
    return async (dispatch) => {
        // 1.发送请求，获取token
        const { data: { token } } = await LoginService(data)
        // 2.调用同步方法
        dispatch(setToken(token))
    }
}

// 获取用户个人信息
export const fetchUserInfo = () => {
    return async (dispatch) => {
        // 1.发送请求
        const { data } = await getUserInfoService()
        // 2.调用同步方法进行
        dispatch(setUserInfo(data))
    }
}